//
//  FinderViewController.m
//  Atlantis
//
//  Created by 何恩营 on 14-12-17.
//  Copyright (c) 2014年 lanou3g.com 蓝鸥科技. All rights reserved.
//

// 发现页面
#import "FinderViewController.h"
#import "SearchViewController.h"
#import "SettingViewController.h"
#import "NetHandler.h"
#import "Categories.h"
#import "UIImageView+WebCache.h"
#import "UIColor+AddColor.h"
#import "CategoryViewController.h"
#import "HotSoundsCategories.h"
#import "FinderCell.h"
#import "ProgramaViewController.h"
#import "PlayViewController.h"
#import "Reachability.h"
#import "MBProgressHUD.h"
#import "FinderCollectionCell.h"

// 宏定义
#define CATEGORYREUSE @"reuse"
#define kTableViewReuse @"tableViewReuse"

@interface FinderViewController ()<UIScrollViewDelegate, UICollectionViewDataSource, UICollectionViewDelegate, UITableViewDataSource, UITableViewDelegate, FinderCellDelegate>

// 整体的scrollView, 整个页面的一起滑动
@property(nonatomic, retain) UIScrollView *scrollView;
// 上侧分组列表CollectionView
// 分类数组, 存放各个分类的信息
@property(nonatomic, retain) NSMutableArray *categoryArr;
// 分组集合视图
@property(nonatomic, retain) UICollectionView *categoryVC;
// hotsounds分类数组
@property(nonatomic, retain) NSMutableArray *hotSoundsArr;
// 下侧tableView
@property(nonatomic, retain) UITableView *tableView;
// 旋转风火轮
@property(nonatomic, retain) MBProgressHUD *hud;

@end

@implementation FinderViewController


// 内存管理
- (void)dealloc
{
    [_scrollView release];
    [_categoryArr release];
    [_categoryVC release];
    [_hotSoundsArr release];
    [_tableView release];
    [super dealloc];
}


// 视图将要出现
- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    
    // 视图将要出现时, 将navigationBar 的hidden设置为NO
    self.navigationController.navigationBarHidden = NO;
    
    // 始终空出导航栏的高度
    self.navigationController.navigationBar.translucent = NO;
    
    // 判断网络字符串是否为空
    if ([self GetCurrntNet]) {
        // 不为空, 则处理网络数据
        // 调用数据处理方法
        [self handleData];
        [self handleDataCategory];
        // 文本显示
        self.hud.labelText = @"loading...";
        
    }else {
        // 否则检查网络
        self.hud.labelText = @"亲,请检查您的网络";
    }
    
    // 刷新数据
    [self.tableView reloadData];
    // 刷新数据
    [self.categoryVC reloadData];
}


#pragma mark 数据处理
// 数据处理
- (void)handleData
{
    // 主页接口路径
    NSString *str = @"http://mobile.ximalaya.com/m/super_explore_index?device=iPhone&includeActivity=true&picVersion=5&scale=2";
    
    // 网络请求
    [NetHandler getDataWithURL:str completion:^(NSData *data) {
        
        // JSON数据解析
        id result = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
        // 通过key值"categories", 取得分组字典
        NSDictionary *categoriesDic = [result objectForKey:@"categories"];
        // 获取类别的数组
        NSArray *dataArr = [categoriesDic objectForKey:@"data"];
        // 对容器类型属性初始化
        self.categoryArr = [NSMutableArray array];
        
        // 遍历数组
        for (NSDictionary *dic in dataArr) {
            // 创建Categories对象, 通过kvc初始化对象
            Categories *cate = [[Categories alloc] initWithDictionary:dic];
            // 将对象添加到数组中
            [self.categoryArr addObject:cate];
            
            // 内存释放
            [cate release];
        }
        
        
        // 风火轮视图移除
        [self.hud removeFromSuperview];
        // 刷新数据
        [self.categoryVC reloadData];
    }];
}

// 数据处理
- (void)handleDataCategory
{
    // 获取网络接口
    NSString *str = @"http://mobile.ximalaya.com/m/index_hotsounds?device=iPhone";
    
    
    // 网络请求
    [NetHandler getDataWithURL:str completion:^(NSData *data) {
        
        // JSON解析
        id result = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
        
        // 创建并赋值
        NSArray *categoriesArr = [result objectForKey:@"categories"];
        
        // 数组初始化
        self.hotSoundsArr = [NSMutableArray array];
        
        // 数组遍历
        for (NSDictionary *cateDic in categoriesArr) {
            
            HotSoundsCategories *hotSounds = [[HotSoundsCategories alloc] initWithDictionary:cateDic];
            
            // sounds数组
            NSArray *soundsArr = [cateDic objectForKey:@"sounds"];
            
            // 数组遍历
            for (NSDictionary *soundsDic in soundsArr) {
                // 创建对象
                Music *sound = [[Music alloc] initWithDictionary:soundsDic];
                // 赋值
                [hotSounds.soundsArr addObject:sound];
                // 内存管理
                [sound release];
            }
            
            // 赋值
            [self.hotSoundsArr addObject:hotSounds];
            
            // 内存管理
            [hotSounds release];
            
        }
        
        // 风火轮视图移除
        [self.hud removeFromSuperview];
        
        // 刷新视图
        [self.tableView reloadData];
    }];
}


- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    
    
    // 导航栏标题
    self.navigationItem.title = @"亚特兰蒂斯";
    // 设置视图控制器的view的背景颜色
    self.view.backgroundColor = [UIColor whiteColor];
    // 右侧设置按钮图片
    UIImage *rightImage = [UIImage imageNamed:@"setting_32.png"];
    // 在导航栏上加一个右侧按钮, 设置图片触发事件
    self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithImage:rightImage style:UIBarButtonItemStyleDone target:self action:@selector(rightBarButtonItemAction:)];
    
    // 在导航栏上加一个左侧按钮
    
    // 左侧搜索按钮图片
    UIImage *leftImage = [UIImage imageNamed:@"search_32.png"];
    // 搜索图片触发事件
    self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithImage:leftImage style:UIBarButtonItemStyleDone target:self action:@selector(leftBarButtonItemAction:)];
    // 搜索按钮填充颜色
    //self.navigationItem.leftBarButtonItem.tintColor = [UIColor orangeColor];
    // scrollView的初始化
    self.scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(self.view.bounds.origin.x, self.view.bounds.origin.y, self.view.bounds.size.width, self.view.bounds.size.height - 64)];
    // 将scrollView添加到View上
    [self.view addSubview:self.scrollView];
    [_scrollView release];
    
    
    // 不同类别的音乐列表(ColletionView)
    
    // collectionView所有的cell的位置都不是固定的, 是由layout对象决定
    
    // UICollectionViewFlowLayout 是一个layout类的基类, 不能直接使用, 它只是规定了一些必须要重写的方法和属性
    UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init];
    // 设置flowLayout的大小
    flowLayout.itemSize = CGSizeMake(self.view.bounds.size.width / 5, self.view.bounds.size.height / 9);
    
    // 设置行间距为0
    flowLayout.minimumLineSpacing = 0;
    // 设置列间距为0
    flowLayout.minimumInteritemSpacing = 0;
    
    // 创建集合视图
    self.categoryVC = [[UICollectionView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height / 9 * 4 + 10) collectionViewLayout:flowLayout];
    
    [flowLayout release];
    
    // 将集合视图的背景颜色设置为 #e6e6e6 编码代表的颜色
    self.categoryVC.backgroundColor = [UIColor colorFromHexCode:@"#e6e6e6"];
    // 指定代理人
    self.categoryVC.dataSource = self;
    self.categoryVC.delegate = self;

    // 将集合视图添加到大scrollView上
    [self.scrollView addSubview:self.categoryVC];
    // 内存释放
    [_categoryVC release];
    
    // collectionView必须要注册一个cell类
    [self.categoryVC registerClass:[FinderCollectionCell class] forCellWithReuseIdentifier:CATEGORYREUSE];
    
    
    
    // tableView, 各个栏目列表
    
    self.tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, self.view.bounds.size.height / 9 * 4 + 10, self.scrollView.bounds.size.width, self.view.frame.size.width * 2 + 420) style:UITableViewStylePlain];
    // 指定代理人
    self.tableView.dataSource =self;
    self.tableView.delegate = self;
    // 将表视图加载到scrollView视图上
    [self.scrollView addSubview:self.tableView];
    // 表示图的高度
    self.tableView.rowHeight = self.view.frame.size.width / 3 + 70;
    
    // 内存管理
    [_tableView release];
    
    // 注册一个cell的重用池
    [self.tableView registerClass:[FinderCell class] forCellReuseIdentifier:kTableViewReuse];
    
    // 设置scrollView视图的中心大小
    self.scrollView.contentSize = CGSizeMake(0, self.tableView.frame.size.height + self.view.bounds.size.height / 9 * 4 + 10);
    
    
    // 风火轮
    self.hud = [[MBProgressHUD alloc]initWithView:self.view];
    // 风火轮模式
    [self.hud setMode:MBProgressHUDModeIndeterminate];
    // 显示
    [self.hud show:YES];
    // 加载到视图上
    [self.view addSubview:_hud];
    
    
    
}

// 判断有无网络连接
-(NSString*) GetCurrntNet
{
    NSString* result;
    Reachability *r = [Reachability reachabilityWithHostname:@"www.apple.com"];
    switch ([r currentReachabilityStatus]) {
        case NotReachable:     // 没有网络连接
            result=nil;
            break;
        case ReachableViaWWAN: // 使用3G网络
            result=@"3G";
            break;
        case ReachableViaWiFi: // 使用WiFi网络
            result=@"WiFi";
            break;
    }
    return result;
}


#pragma mark 按钮点击事件

// 点击左侧按钮事件
- (void)leftBarButtonItemAction:(UIBarButtonItem *)left
{
    // 创建一个SearchViewController对象
    SearchViewController *searchVC = [[SearchViewController alloc] init];
    // 跳转到搜索页面
    [self.navigationController pushViewController:searchVC animated:YES];
    
    // 释放searchVC内存
    [searchVC release];
}

// 点击右侧按钮事件
- (void)rightBarButtonItemAction:(UIBarButtonItem *)right
{
    // 创建一个SettingViewController对象
    SettingViewController *settingVC = [[SettingViewController alloc] init];
    
    // 跳转到设置页面
    [self.navigationController pushViewController:settingVC animated:YES];
    
    // 内存释放
    [settingVC release];
    
}

#pragma mark Colletion协议方法
// collectionView的cell的行数
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
    // 返回分类数组的长度
    return self.categoryArr.count;
}

// 自定义collectionView的cell实现方法
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    // 创建自定义cell
    FinderCollectionCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:CATEGORYREUSE forIndexPath:indexPath];
    
    // 获取当前cell 所显示的分类对象
    Categories *cate = [self.categoryArr objectAtIndex:indexPath.row];
 
    // 自定义cell赋值
    cell.cate = cate;
    
    return cell;
}

//返回这个UICollectionView是否可以被选择
-(BOOL)collectionView:(UICollectionView *)collectionView shouldSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
    // 设置集合视图变为可点击
    return YES;
}

//UICollectionView被选中时调用的方法
-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
    // 选中cell之后, 让其还原
    [collectionView deselectItemAtIndexPath:indexPath animated:YES];
    // 创建分类视图控制器
    CategoryViewController *categoryVC = [[CategoryViewController alloc] init];
    // 给分类视图控制器属性赋值   页面传值
    categoryVC.category = [self.categoryArr objectAtIndex:indexPath.item];
    
    // push 推出分类视图控制器
    [self.navigationController pushViewController:categoryVC animated:YES];
    // 内存管理
    [categoryVC release];
}


#pragma mark tableView协议方法
// cell的行数
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return self.hotSoundsArr.count;
}

// cell的值
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    // 自定义cell
    FinderCell *cell = [tableView dequeueReusableCellWithIdentifier:kTableViewReuse];
     // 赋值
    cell.hotSounds = [self.hotSoundsArr objectAtIndex:indexPath.row];
    
    // 指定当前类作为finderCell的代理人
    cell.delegate = self;
    
    return cell;
}

// 实现finderCell协议方法
- (void)push:musicArr index:(NSInteger)index
{
    // 创建播放视图, 单例
    PlayViewController *playVC = [PlayViewController sharePlayVC];
    Music *music = [musicArr objectAtIndex:index];

    // 判断是否为同一对象
    if (![playVC.music.trackId isEqual:music.trackId]) {
        // 页面传值
        playVC.musicArr = musicArr;
        playVC.currentMusic = index;
        // 播放器播放
        [playVC play];
    }
    // 推出播放视图
    [self.navigationController pushViewController:playVC animated:YES];
}

// 点击cell实现方法
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
    // 创建视图
    ProgramaViewController *programaVC = [[ProgramaViewController alloc] init];
    HotSoundsCategories *hot = [self.hotSoundsArr objectAtIndex:indexPath.row];
    // 赋值
    programaVC.type = hot.name;
    programaVC.cateTitle = hot.title;
    // 推出页面
    [self.navigationController pushViewController:programaVC animated:YES];
    // 内存管理
    [programaVC release];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

/*
#pragma mark - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    // Get the new view controller using [segue destinationViewController].
    // Pass the selected object to the new view controller.
}
*/

@end
